package cz.pecinovsky.česky.oopnz._134_;
//Příliš žluťoučký kůň úpěl ďábelské ódy

import cz.pecinovsky.česky.oopnz.správce.IOvládaný;
import cz.pecinovsky.česky.oopnz.správce.Kreslítko;
import cz.pecinovsky.česky.oopnz.správce.Řadič;
import cz.pecinovsky.česky.oopnz.správce.SprávcePlátna;


import static cz.pecinovsky.česky.oopnz._134_.IOtočný_136_      .IOtočný;
import static cz.pecinovsky.česky.oopnz._134_.Šipka_134_        .Šipka;


//import static cz.pecinovsky.česky.oopnz._134_.Vozidlo_A_137_     .Vozidlo_A;
////////////////////////////////////////////////////////////////////////////////
//%%+  +++++ Konec ignorovaného počátečního textu +++++
//%I+ 
//import cz.pecinovsky.česky.oopnz.správceplátna.IOvládaný;
//import cz.pecinovsky.česky.oopnz.správceplátna.Kreslítko;
//import cz.pecinovsky.česky.oopnz.správceplátna.Řadič;
//import cz.pecinovsky.česky.oopnz.správceplátna.SprávcePlátna;
//%I-

import cz.pecinovsky.česky.oopnz.utility.IO;
import cz.pecinovsky.česky.oopnz.utility.Pozice;
import cz.pecinovsky.česky.oopnz.utility.Směr8;
//%X+ xxxxx Začátek přeskakovaného textu xxxxx
/*******************************************************************************
 *<pre>
 * Předchozí:   Není - toto_je_nově_definovaná_třída
 *              Ttt v projektu Ppp
 * Následující: Prozatím není
 *
 * Projekt  Ppp
 *   + Přidáno
 *   - Odebráno
 *   ~ Změněno
 *</pre>
 */
public class Vozidlo_A_137_
{    private Vozidlo_A_137_() {}   static
////////////////////////////////////////////////////////////////////////////////
//%X- ----- Konec přeskakovaného textu -----


/*******************************************************************************
 * Instance třídy {@code Vozidlo_A} představují "pojízdné" objekty,
 * které je možné ovládat z klávesnice.
 *
 * @author Rudolf PECINOVSKÝ
 * @version 6.03.2017 — 2010-11-08
 */
public class Vozidlo_A implements IOvládaný
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================

    /** Plátno, na které se bude instance kreslit. */
    private static final SprávcePlátna SP = SprávcePlátna.getInstance();



//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================

    /** Rychlost pohybu, tj. o kolik bodů se objekt posune po jednom příkazu. */
    private int rychlost = SP.getKrok();



//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** Dekorovaný objekt, který bude ovládán z klávesnice. */
    private final IOtočný dekorovaný;



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Obalí otočný objekt zadaný v parametru schopností býti ovládán
     * z klávesnice.
     *
     * @param ovládaný Dekorovaný objekt
     */
    public Vozidlo_A(IOtočný ovládaný)
    {
        this.dekorovaný = ovládaný;
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Reakce na stisk klávesy se šipkou vpravo.
     */
    @Override
    public void vpravo()
    {
        Směr8 směr = dekorovaný.getSměr();
        dekorovaný.setSměr(směr.vpravoVbok());
    }


    /***************************************************************************
     * Reakce na stisk klávesy se šipkou vlevo.
     */
    @Override
    public void vlevo()
    {
        Směr8 směr = dekorovaný.getSměr();
        dekorovaný.setSměr(směr.vlevoVbok());
    }


    /***************************************************************************
     * Reakce na stisk klávesy se šipkou vzhůru.
     */
    @Override
    public void vzhůru()
    {
        Pozice pozice = dekorovaný.getPozice();
        Směr8  směr   = dekorovaný.getSměr();
        pozice = směr.dalšíPozice(pozice, rychlost);
        dekorovaný.setPozice(pozice);
    }


    /***************************************************************************
     * Reakce na stisk klávesy se šipkou dolů.
     */
    @Override
    public void dolů()
    {
    }


    /***************************************************************************
     * Reakce na stisk klávesy enter.
     */
    @Override
    public void enter()
    {
    }


    /***************************************************************************
     * Reakce na stisk mezerníku.
     */
    @Override
    public void mezera()
    {
    }


    /***************************************************************************
     * Reakce na stisk klávesy ESC, tj. na ukončení ovládání z klávesnice.
     */
    @Override
    public void konec()
    {

    }


    /***************************************************************************
     * Vrátí řetězec sloužící jako textový "podpis" instance
     * používaný především při ladění.
     *
     * @param kreslítko Kreslítko, které nakreslí instanci
     */
    @Override
    public void nakresli(Kreslítko kreslítko)
    {
        dekorovaný.nakresli(kreslítko);
    }


    /***************************************************************************
     * Vrací textovou reprezentaci (podpis) dané instance
     * používanou především k ladicím účelům.
     *
     * @return Požadovaná textová reprezentace
     */
    @Override
    public String toString()
    {
        return "Voziclo_A_(" + dekorovaný.toString() + ")";
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================

    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
        Šipka šipka  = new Šipka();
        Vozidlo_A va = new Vozidlo_A(šipka);
        Řadič řadič  = new Řadič(va);

        IO.zpráva("Až se projedeš, stiskni OK");
        System.exit(0);
    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}

//%%-  ----- Začátek ignorovaného závěrečného textu -----
////////////////////////////////////////////////////////////////////////////////
//== TESTY A METODA MAIN =======================================================

    /***************************************************************************
     * Testovací metoda.
     */
    public static void test()
    {
        Šipka šipka  = new Šipka();
        Vozidlo_A va = new Vozidlo_A(šipka);
        Řadič řadič  = new Řadič(va);

        IO.zpráva("Až se projedeš, stiskni OK");
        System.exit(0);
    }
    /** @param args Parametry příkazového řádku - nepoužívané. */
    public static void main( String[] args )  {  test();  }
}
